package com.gxa.modules.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.gxa.common.base.RespResult;
import com.gxa.modules.entity.SysMenu;
import com.gxa.modules.entity.SysRole;
import com.gxa.modules.entity.SysUser;
import com.gxa.modules.mapper.SysMainView;
import com.gxa.modules.mapper.SysMenuMapper;
import com.gxa.modules.mapper.SysRoleMapper;
import com.gxa.modules.service.MainService;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;
@Service
// 主页面加载实现类
public class MainServiceimpl implements MainService {


    @Autowired
    private SysMainView view;//主页面的加载函数mapper接口
    @Autowired
    private SysRoleMapper roleMapper;//获取角色的mapper函数
    @Override
    public RespResult selectMainView() {
        //        获取到当前操作的用户！！！
        Subject subject = SecurityUtils.getSubject();
//        将对象转换为参数对象！！！
        SysUser sysUser = BeanUtil.copyProperties(subject.getPrincipal(), SysUser.class);
//        根据id获取到对应的角色id
        List<SysRole> rolebyId = roleMapper.findRolebyId(sysUser.getId());
//        创建个set集合去重
        Set<Integer> roleIds = new HashSet();
        for (SysRole sysRole : rolebyId) {
            roleIds.add(sysRole.getId());
        }
//        获取到当前用户的一级权限菜单栏！！！
        List<SysMenu> sysMenus = view.myMianViewOne(roleIds);
        List mainlist = new ArrayList();
        if (sysMenus.size()>0){
//            获取到每一个一级权限
            for (SysMenu sysMenu : sysMenus) {
                Map mapone = new HashMap();
                mapone.put("title",sysMenu.getTitle());
                mapone.put("id",sysMenu.getId());
                mapone.put("icon",sysMenu.getIcon());
//             获取到每一个一级菜单栏的二级菜单栏
                List list = new ArrayList();
                List<SysMenu> sysMenus1 = view.myMianViewTwo(sysMenu.getId());
                if (sysMenus1.size()>0){
                    for (SysMenu menu : sysMenus1) {
                        Map twoMap = new HashMap();
                        twoMap.put("title",menu.getTitle());
                        twoMap.put("id",menu.getId());
                        twoMap.put("icon",sysMenu.getIcon());
                        twoMap.put("url",sysMenu.getUrl());
                        list.add(twoMap);
                    }
//                    把所有的子模块添加进集合
                    mapone.put("children",list);
                }
                mainlist.add(mapone);
            }
            return RespResult.success(mainlist);
        }

        return null;
    }

}
